我有一个on单击事件,它会更改要合并为类似json的对象的三个元素的值:
/**
* getRefsList
* Doc: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/refs/list?view=azure-devops-rest-5.1#refs
*
* @param $branch
* @return bool|string
*/
function getRefsList($branch){
global $baseUri;
global $organization;
global $project;
global $repositoryId;
global $username;
global $accessToken;
//GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/refs?api-version=5.1
$url = $baseUri . '/' . $organization . '/' . $project . '/_apis/git/repositories/' . $repositoryId . '/refs?api-version=5.1';
$queryArr = [
'filter' => 'heads/' . $branch,
];
if(!empty($queryArr)){
$queryStr = http_build_query($queryArr);
$url .= '&' . $queryStr;
}
// echo($url);exit;
$authorization = 'basic ' . base64_encode($username . ':' . $accessToken);
// echo $url;exit;
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'authorization: ' . $authorization
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
];
//In case you need a proxy
// $options[CURLOPT_PROXY] = 'http://127.0.0.1:1087';
curl_setopt_array($ch, $options);
$responseJson = curl_exec($ch);
if(curl_errno($ch)){
echo 'Error: ' . curl_error($ch);
}
$retArr = json_decode($responseJson, true);
curl_close($ch);
$refs = [];
if(isset($retArr['count']) && $retArr['count'] > 0){
$refs = $retArr['value'];
}
return $refs;
}
/**
* getObjectIdOfRef
* @param $branch
*
* @return mixed|string
*/
function getObjectIdOfRef($branch){
$refs = getRefsList($branch);
$objectId = '';
if($refs){
foreach($refs as $ref){
if($ref['name'] == 'refs/heads/'.$branch){
$objectId = $ref['objectId'];
break;
}
}
}
return $objectId;
}
/**
* create a file in the specified repo and branch
* Doc: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pushes/create?view=azure-devops-rest-5.1
* @param $uploadFilePath
* @param $path
*
* @return mixed
*/
function create($uploadFilePath, $path){
global $baseUri;
global $organization;
global $project;
global $repositoryId;
global $branch;
global $username;
global $accessToken;
$url = $baseUri . '/' . $organization . '/' . $project . '/_apis/git/repositories/' . $repositoryId . '/pushes?api-version=5.1';
$authorization = 'basic ' . base64_encode($username . ':' . $accessToken);
//$url sample: https://dev.azure.com/kmx3ecup/img_bed/_apis/git/repositories/img_bed/pushes?api-version=5.1&searchCriteria.refName=&searchCriteria.includeRefUpdates=false&$top=1
// echo $url;exit;
$oldObjectId = getObjectIdOfRef($branch);
// var_dump($oldObjectId);exit;
$postFields = [
'refUpdates' => [
[
'name'=> 'refs/heads/' . $branch,
'oldObjectId' => $oldObjectId,
],
],
'commits' => [
[
'comment' => 'This is a test push',
'changes' => [
[
//add, edit, delete
'changeType' => 'add',
'item' => [
'path' => $path,
],
'newContent' => [
'content' => base64_encode(file_get_contents($uploadFilePath)),
'contentType' => 'base64encoded'
]
]
],
],
],
];
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'authorization: ' . $authorization,
'content-type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($postFields),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
];
//In case you need a proxy
// $options[CURLOPT_PROXY] = 'http://127.0.0.1:1087';
curl_setopt_array($ch, $options);
$responseJson = curl_exec($ch);
if(curl_errno($ch)){
echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
return json_decode($responseJson, true);
}
$baseUri = 'https://dev.azure.com';
$organization = '<YOUR_ORGANIZATION>';
$project = '<YOUR_PROJECT_NAME>';
$repositoryId = '<YOUR_REPOSITORY_ID_OR_REPOSITORY_NAME>';
$branch = 'master';
$username = '<YOUR_USERNAME>';
$accessToken = '<YOUR_ACCESS_TOKEN>';
$uploadFilePath = '/path/to/test.jpg';
$path = '/images/' . date('Y/m/d') . '/' . basename($uploadFilePath);
$retArr = create($uploadFilePath, $path);
$publicUrl = $retArr['repository']['url'] . '/items?path=' . $path . '&versionDescriptor[versionOptions]=0&versionDescriptor[versionType]=0&versionDescriptor[version]=' . $branch . '&resolveLfs=true&$format=octetStream&api-version=5.0';
echo $publicUrl;
function generateNumbers() {
let a = Math.random()
let b = Math.random()
let c = Math.random()
console.log({
"numbers": [
{"a": a, "b": b, "c": c}
]
})
}
我要取代每次单击添加另一个对象<button onclick="generateNumbers()">Three Numbers</button>
,而不是替换a
,b
和c
。这可能吗?
{"a": a, "b": b, "c": c}
答案 0 :(得分:1)
您需要创建一个包含numbers
属性作为数组的初始对象,您可以在其中使用a
,b
和c
属性推送新生成的对象。了解有关.push()
的信息:
push()
方法将一个或多个元素添加到数组的末尾并返回该数组的新长度。
尝试以下操作:
const data = {
numbers: []
};
function generateNumbers() {
let a = Math.random()
let b = Math.random()
let c = Math.random()
data.numbers.push({"a": a, "b": b, "c": c});
console.log(data);
}
<button onclick="generateNumbers()">Three Numbers</button>
我希望这会有所帮助!
答案 1 :(得分:0)
您需要为generateNumbers
函数外部的数字添加一个变量。
const state = { numbers: [] }
function generateNumbers() {
let a = Math.random()
let b = Math.random()
let c = Math.random()
state.numbers.push({ a, b, c })
console.log(state)
}
<button onclick="generateNumbers()">Three Numbers</button>
答案 2 :(得分:0)
您需要在函数之外定义对象,并将numbers
中设置的新值推送到generateNumbers
const data = { numbers: [] }
function generateNumbers(){
const val = Math.random;
data.numbers.push({ a: val(), b: val(), c: val() )})
}